iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
IT管理

30天就上手之微軟Power Automate Desktop系列 第 29

【Day29】Power Automate Desktop 某資料夾的檔案檢查-原始版

  • 分享至 

  • xImage
  •  

原本要寫PA線上流程的,但最近剛好有遇到一個不錯的案例,所以就來講講吧!

這次主要是要檢查以年月日為檔名的Log檔案,每天有沒有正常的產生”前一天的log檔案”,並依排程搬到共用資料夾裡面去。

不過由於這次的檔名不但是自動產生的,還和一般常見的年月日,如:2023/09/XX這種最少8~10碼的日期格式不一樣,反而是2023-9-XX這樣的格式,而且還又是”前一天”的日期!!

感覺光是個檔名就有兩個小難點了!

因為PAD中的系統日期是最少8碼的格式,也就是最少也是”202309XX”;在來就是”前一天”,這在邏輯上只要日期-1就可以了,看起來似乎也沒那麼難,對嗎?

再來就是要在一堆檔案中找到關鍵的那個以前一天日期為檔名的檔案了。

那就來做做看吧!

首先這次檔名的部分
https://ithelp.ithome.com.tw/upload/images/20230901/20159965ynAlxgmQQd.png

由於最近重新翻了入門的那本工具書,結果有了驚人的新發現(明明就是有書不好好看……),所以這部份的流程又重新設計過了,原本就得流程和說明一樣會留在後面!(這樣就可以比較兩個差異了)

這邊先提一下,本次會用到一個之前都沒用到的功能,那就是” 加入至日期時間”

如果是單 日/月/年 的日期加減,是可以使用日期時間→加入至日期時間

參數設定是負數(如:-1),就是減去的意思;都沒設定正負數符號(如:1),就是和設定的參數相加的意思
https://ithelp.ithome.com.tw/upload/images/20230914/20159965YugOxgZcsb.png

子流程的部分:

首先先取得系統日期,因取得的系統日期在10月以前會是一位數(如:9,不是09(<<<這是兩位數)),所以建立一個判斷式來判斷月份是否式一位數的月(<10)或兩位數(>=10)的月,然後去設定不同的月份格式。

如果月份小於10,則直接使用一位數的月(yyyy-M-dd)
如果月份大/等於10,則直接使用兩位數的月(yyyy-MM-dd)
https://ithelp.ithome.com.tw/upload/images/20230914/20159965gWSVvXgLQD.png

因為檔名會以流水號1~2區分,所以做一個迴圈來建立要檢查的完整檔名
這部分也可以設定兩個變數,分別對應1的和2的檔名
我一開始也是這麼做…
再來就是判斷檔案存不存在於指定路徑中了
https://ithelp.ithome.com.tw/upload/images/20230914/20159965rfjoXXg7vO.png
https://ithelp.ithome.com.tw/upload/images/20230914/201599653BNxYPDKHz.png

不過目前這流程還沒有經過跨月的洗禮,所以還不知道跨月的時候會發生什麼事情就是…

這流程到這一個版本的時後已經是經過改良後的第5個版了,所以流程才得以更精確並且得到大幅簡化的;剛開始的時候還傻傻地用For Each迴圈跑超久的咧XD

所以PAD流程開發除了得要一次次調教以外,有時候往往還需要一個靈感,靈感來得時候流程開發與規劃就做得特別順暢呢!XD

下面來看看我原本做的流程,光看就比目前的複雜了許多,但當時並沒發現PAD實際上是有好用的功能可以用的,所以就多繞了點遠路了!


https://ithelp.ithome.com.tw/upload/images/20230901/20159965L6c8iv5wBT.png

一開始一樣是呼叫老熟人Getdatetostr子流程來取得系統日期了!

在來就是前面有提到檔案格式的部分,由於PAD的日期轉文字允許將年月日拆分開來,在分別給不同變數作為變數值,所以這邊就把年月日個別拆開。

但很可惜的是,月份的部分無法只設定為一個M,一定得是MM才會顯示正確的月份!

但各為數月的話,MM勢必是0X,一直到10月為止,十位數那邊都會有個0。

而對於電腦的判斷來說,2023-09-XX和2023-9-XX是不一樣的!

所以這邊得先做一個判斷式確認MM的變數是不是有個0存在,如果有的話就把取得MM的值做一次轉換,轉換成”數字”,這樣前面的0自然就不見了(但要注意預設的小數為數是否為0);接著再把轉換後的數值轉回成文字,這樣十位數是0的問題就解決了!

至於10呢?就算10被轉來轉去以後,那個值還是10啊,所以並沒有差別的!
https://ithelp.ithome.com.tw/upload/images/20230901/20159965kvTptlP0lQ.png

接著來處理日期部分,一樣要先將DD的值轉為數字的同時就先減1!(其實也可以設個變數,一樣是FormattedDateTime4 -1)

然後設定兩個變數,把檔案的路徑和檔名一次塞進去作為變數值。(因為我的Log檔案每次會有兩個)

再來取得Log檔存檔的資料夾的所有檔案清單。
https://ithelp.ithome.com.tw/upload/images/20230901/20159965titcb4BgHA.png
https://ithelp.ithome.com.tw/upload/images/20230901/20159965Op2qGSu36H.png

接下來就是用IF判斷式做兩個檔案的確認,不論有無都跳出訊息視窗,並以訊息內容做區分檔案存不存在!

檔案檢查的進階版到這邊就算是完成啦,以後每天跑一次流程就讓機器人代為確認了!

這樣看起來是不是不太困難呢?

雖然很想這麼說,但這流程在第一次跨月的時後馬上就遇到問題了……那就是跨月之後的日期變數-1的部分對機器人來說是可以正常執行的,因為就算結果是0這種不會出現在日曆上的日期,對機器人來說也是一點問題也沒有的喔!(畢竟只是日期變數-1啊…)

所以就只能繼續改善流程了,加個防呆了!

至於防呆怎麼做呢?其實說起來也不算太難,基本就是讓機器人判斷當日期變成0的時後讓機器人去改寫日期變數罷了!!
https://ithelp.ithome.com.tw/upload/images/20230901/20159965EUm4Bi7gFT.png
https://ithelp.ithome.com.tw/upload/images/20230901/20159965Dgwetdx2OC.png

這裡的判斷流程主要接續在”文字轉數字變數:FormattedDateTime4 -1”下面。

判斷依據是日期變數-1=0,也就是跨月時才做下面的月份判斷;也就是說,如果日期變數-1不為0時就不做!

判斷部分先是針對2月這個特殊月份做一個判斷,如果取得的系統年份可以整除4的時後,2月就是29天,無法整除的話就是28天;因為2月只是一個例外的月份,所以要寫月份判斷的一開始,因為一旦2月這個條件被觸發就不用繼續往下了。

接下來就是判斷大、小月了,所以我先設定一個變數NewVar3,把31天的”大月”全都當作變數值;再來判斷如果系統取得的月份是不是列在NewVar3變數值裡面的大月,如果式的話就是31天,不是的話就是30天。


好了,Day.29就到這邊結束了,接下來的最後一天就讓我們來總結下吧!


上一篇
【Day28】Power Automate Desktop 讓機器人幫我壓縮分類後的資料夾 II
下一篇
【Day30】Power Automate Desktop 某資料夾的檔案檢查-進階版 與 總結
系列文
30天就上手之微軟Power Automate Desktop30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言